package pub.com.fengbo.core.util;

import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @data 2010-6-11
 * 
 * 反射 测试
 * @author fengbo
 *
 */
public class MyReFlect {
	/**
	 * @author fengbo
	 * 根据类名 和 该类对应的方法名 执行该方法
	 * @param className 类完整名 如 java.lang.String
	 * @param methodName 方法名
	 * @param returnType 返回值类型
	 * 
	 * @return
	 * @throws Exception 
	 */
	public static void runMethod() throws Exception{
		Class c=Class.forName("com.util.FileUtil"); 
		Object obj=c.newInstance(); 
		System.out.println(obj.getClass());
		Method[] ms = c.getMethods();
		for(Method m:ms){
			Class[] cl =m.getParameterTypes(); //获得参数列表
			System.out.print("方法名："+m.getName() +" 参数个数："+cl.length+"  ");
			for(Class cc:cl){
				System.out.print("\t"+cc.getName());
			}
			Class returnclass = m.getReturnType(); //返回值类型
			System.out.println("返回值类型："+returnclass.getName());
		}
		//获得创建目录的方法 第一个参数为方法名 ，后面的参数不限制 想给几个给几个
		Method m = c.getMethod("createMkdir",String.class); 
		Object robj = m.invoke(obj,"D:/test"); 
		//获得创建文件的方法
		Method creteFile = c.getMethod("createFile", String.class);
		Object file = creteFile.invoke(obj, "D:/test/test.txt");
		//获得写入文件的方法
		Method writeFile = c.getMethod("writeFile", File.class,String.class);
		Object wfile = writeFile.invoke(obj, file,"test rite file ");
		
		System.out.println(robj);
	}
	//第一步 动态将 key value 添加到 map中
	public static void test(){
		//动态产生List 并且将list 存入map中 标识
		
		Map listMap = new HashMap();
		listMap.put("1", new ArrayList());
		List list = (ArrayList)listMap.get("1");
		list.add("aaaaaaaaaa");
		list.add("bbbbbbbbbbb");
		listMap.put("2", new ArrayList());
		listMap.put("3", new ArrayList());
		listMap.put("1", new ArrayList());
		
	
		System.out.println(listMap.size());
		System.out.println(((ArrayList)listMap.get("1")).size());
	}
	
	public static void main(String [] args) throws Exception{
		test();
	}
}
